/**
 * 
 * 核心概念
 *  koa application 应用程序
 *  Context 上下文
 *  request response
 *  async function
 *  在程序中，有无数个中间件处理上下文
 * 
 * async 函数 返回asyncFunction对象的异步函数。它会通过一个隐式的Promise返回其结果。
 * 但是如果你的代码使用了异步函数，它的语法和结构会更像是标准的同步函数
 * 
 * koa-router
 * koa-body
 * koa/cors
 */


const Koa = require("koa")
const Router = require('koa-router')
const koaBody = require('koa-body')
const cors = require('@koa/cors')

const app = new Koa()
const router = new Router()


router.get('/params', ctx => {
  let params = ctx.request.query // 获取get的
  console.log(JSON.stringify(params))
  ctx.body = params
})

router.post('/api', ctx => {
  let {body} = ctx.request  // 获取post请求体
  console.log(ctx.request)
  console.log(body)
  ctx.body = body
})

router.get('/async', async (ctx) => {
  let result = await new Promise((resolve) => {
    setTimeout(function () {
      resolve('hello world 2s later')
    }, 2000)
  })
  ctx.body = result
})

app.use(koaBody())

app.use(router.routes())
   .use(router.allowedMethods())

app.listen(3000)



